Computer software applications may be represented as abstract models using modeling methodologies such as the Unified Modeling Language (UML). Furthermore, computer application development environments themselves may be represented as abstract models, and these models are commonly referred to as “metamodels.” Thus, for example, a metamodel of the C++ programming language may be used to understand elements of the C++ programming language, whereas a model of an inventory application written in the C++ programming language may be used to understand elements of the inventory application.
Computer software applications are often analyzed using various techniques to determine their behavior. One testing methodology, commonly referred to as “static analysis,” involves analyzing a computer software application while applying only static considerations (i.e., without executing the computer software application). One challenge of static analysis techniques relates to determining the behavior of reusable components of computer software applications, such as procedures or functions, that may have different behavior in different contexts. For example, a reusable sorting procedure may have customer records passed to it in one context, and employee records passed to it in another, where the procedure passes the sorted records to different destinations depending on the context. Static analysis of a reusable component that is performed without consideration to the component's context may wrongly suggest that all outcomes of the component are to occur in every context.